namespace algo {
    const db STT = 0.01L;
    const db EDT = 0.00001L;
    const db DTT = 0.9998L;
    const db RAT = 10.0L;
    void SA(Sta &ansSta) {
        Sta curSta = ansSta; db ansE = E(ansSta);
        for (db T = STT; T > EDT; T *= DTT) {
            Sta newSta; newSta.reserve(cnt);
            for (Circ x : curSta) newSta.push_back(Circ{
                x.x + rnd(-width, width) * T * RAT,
                x.y + rnd(-height, height) * T * RAT,
                x.r
            });
            db newE = E(newSta);
            if (newE <= ansE) ansE = newE, curSta = ansSta = newSta;
            else if (exp(-(newE - ansE) / T) > rnd()) curSta = newSta;
        }
    }
}
